/*
 * File:Invoker.java Type:net.wangds.common.command.Invoker
 */

package net.wangds.common.command;

/**
 * 命令调用者.
 * <p>
 * <h1>修改列表:</h1>
 * <ol>
 * <li>初始版本, by wangds@gmail.com, 2013-11-7 上午10:29:56</li>
 * </ol>
 * </p>
 * 
 * @param <R>
 *          接收者类型.
 * @param <C>
 *          命令.
 * 
 * @author wangds@gmail.com
 * @version 0.1.2
 * @since 0.1
 */
public interface Invoker<R extends CommandReceiver, C extends Command<R>> {

  /**
   * 构建命令对象.
   * @param receiver
   *          命令接收者.
   * @param command
   *          命令.
   * @return 设置接收者的命令.
   */
  C buildCommand(R receiver, C command);

  /**
   * 调用命令.
   * 
   * @param command
   *          命令.
   * @throws E
   *           命令执行中可能的异常.
   */
  void invoke(C command) throws Exception;

}
